var DataGridUtil = {
	/**
	 * 数据列表
	 * @param obj		JQuery的table对象
	 * @param param 	grid参数，会覆盖默认
	 * @returns
	 */
	grid : function(obj, param) {
		var options = $.extend({
			cache:false,
			fit : true,
			fitColumns : false,
			border : false,
			singleSelect : true,
			nowrap : true,
			pagination : true,
			checkOnSelect : false,
			selectOnCheck : false,
			pageSize : 15,
			pageList : [ 15, 20, 30, 40, 50 ]
		},param);
		if(options.columns) {
			var objs = options.columns[0];
			for(var i=0;i<objs.length;i++) {
				if(!objs[i].width){
					objs[i].width = 150; //默认表头宽度
				}
			}
		}
		var obj = $(obj).datagrid(options);
		return obj;
	},
	query : function(obj, param) {
		var options = $.extend({},param);
		$(obj).datagrid(options);
	}
};


var Dialog = {
	/**
	 * 模式窗口工具，注意必须是模式窗口，否则打开多个时，
	 * Dialog.handler只保留最新的，会发生错误
	 * @param param		dailog参数
	 * @returns
	 */
	open:function(param) {
		if(param.data) {//data用于向打开窗口传递数据
			Dialog.data = param.data;
		}
		if(Dialog.handler == undefined) {
			var options = $.extend({
			    //inline:true, 加上报错
				closed: false,
				cache: false,
				modal: true,
				title: "新建窗口",
				width: 800,
				height: 600,
				onClose:function(){
					Dialog.handler = undefined;
					Dialog.data = undefined;
					$(this).dialog("destroy");
				}
			},param);
			Dialog.handler = $('<div/>').dialog(options);
			return Dialog.handler;
		}
	},
	//关闭当前打开的模式窗口
	close:function(){
		Dialog.handler.dialog("close");
	}
}


var Messager = {
	/**
	 * 提示信息窗口
	 * @param msg
	 */
	info:function(msg){
		$.messager.show({
			title:'提示',
			msg:msg,
			showType:'slide',
			style:{
				height:100,
				top:document.body.scrollTop+document.documentElement.scrollTop
			}
    	});
	}
}

var FormUtil = {
	/**
	 * 将form值转化为JSON数据
	 * @param form 传入JQuery的form对象
	 * @returns 
	 */
	serserializeArray:function(form){
		var o = {};
		$.each($(form).serializeArray(), function(index) {
			if (o[this['name']]) {
				if(''!=this['value']) {
					o[this['name']] = o[this['name']] + "," + this['value'];
				}
			} else {
				if(''!=this['value']) {
					o[this['name']] = this['value'];
				}
			}
		});
		return o;
	},
	
	
	cleanData:function (id){
		$(':input','#'+id)  
		 .not(':button, :submit, :reset, :hidden')  
		 .val('')  
		 //.removeAttr('checked')  
		 .removeAttr('selected'); 
	},
	
	cleanDataByClass:function (id){
		$('#'+id).find(".clean").val("");//按照样式清空；
	},
	
	/**
	 * 用JSON数组填充form,serserializeArray反向操作，用于修改时填充数据
	 * @param form	传入JQuery的form对象
	 * @param data	要填充的JSON数据
	 */
	fillData:function(form,data,type){ 
		if(data){
			$.each($(form).serializeArray(), function(index) {
				//$("input[name='"+this['name']+"']").val(data[this['name']]); //可能会影响其他页面控件值
				//$("#"+$(form).attr('id')+" #"+this['name']).val(data[this['name']]); //改用多层ID选择器，避免影响其他form控件值
				if(type=='id'){
					var thisName="";
					if(this['name'].indexOf(".")>=0){
						thisName = this['name'].split(".")[1];
					}else{
						thisName =  this['name'];
					}
					if(data[thisName]){
						$("#"+$(form).attr('id')+" #"+thisName).val(data[thisName]); //改用多层ID选择器，避免影响其他form控件值
					}
				}else{
					var dealName =this['name'].split('.')[1];
					if(data[dealName]){
						$("#"+$(form).attr('id')+" *[name='"+this['name']+"']").val(data[dealName]); //按name匹配赋值
						if("IMG"!=$(this)[0].tagName){
							$("#"+$(form).attr('id')+" *[name='"+this['name']+"']").attr("src",data[dealName])
						}
					}
				}
			
			});	
		}
	},

	/**
	 * 反显表单数据 add 20160710 xhe
	 * @param obj 对象别名
	 * @param oj 对象值
	 */
	loadView:function(vobj,oj){
		var obj = eval(oj);
		try{ctx}catch(e){alert("loadView检测到页面未定义ctx变量！"+e);return;}
	    for(x in obj){
	        key = x;
	        value = obj[x];
	        if(strUtil.isNull(value)){
	        	continue;
	        }
	        if(!strUtil.isNull(vobj) && "#"!=vobj){
	        	key = vobj+"."+key;//data-name="pro.proName"情况使用
	        }
	       // alert(key+"-->"+value);
	        var txtVal = value;
	       // key = p+"."+key;
	        $("[data-name='"+key+"']").each(function(i){
	        	var thisObj = $(this);
	        	//判断是否有数据字典定义取值
	        	var cateEname = thisObj.attr("data-dict");
	        	
	        	if(undefined!=cateEname && cateEname){
	        		var fatherValue = 0;
	        		
	        		//处理地区数据字典级联操作
	        		if(cateEname=="area") {
	        			if(txtVal.substring(2,txtVal.length)!="0000") { //如果不是省
		        			if(txtVal.substring(4,txtVal.length)=="00") { //判断是否是市
		        				fatherValue = txtVal.substring(0,2)+"0000";
		        			} else if(Number(txtVal.substring(4,txtVal.length))>0){
		        				//暂无地级县，有区为直辖市、区
		        				fatherValue = txtVal.substring(0,3)+"000";//判断为地区
		        				//fatherValue = txtVal.substring(0,4)+"00";//判断为地区
		        			}
		        		}
	        		}
	        		$.ajax({type:'post',async:false,dataType:'json',
	        			url:ctx+'/dictSelect.action?cateEname='+cateEname+'&fatherValue='+fatherValue,
	        			success:function(myData){
	        				//console.log(myData);
	        				for(var k in myData){
	        					//alert(txtVal+"=="+data[k].id+"="+data[k].text);
	        					if(txtVal==myData[k].id){
	        						thisObj.attr("data-val",txtVal);
	        						thisObj.text(myData[k].text);
	        						return;
	        					}
	        				}
	        			},
	        			error:function(){
	        			 alert("请检查服务器！");
	        			}
	        		});
	        	}else{
	        		thisObj.attr("data-val",value);//存储原值
	        		
	        		//1.转换格式
	        		var dataFormat = thisObj.attr("data-format");//格式转换
	        		if(undefined!=dataFormat && txtVal){
	        			try{
	        				if("fmoney"==dataFormat)txtVal = fmoney(value);//普通千分符格式
		        			if("fmoneyzhuan"==dataFormat)txtVal = moneyZhuan(value,'面议');//万元,亿单位换算
		        			if("getApplyStatusTxt"==dataFormat)txtVal = getApplyStatusTxt(value);//报名状态nyt
		        			if("getApplyStatusTxtBjte"==dataFormat)txtVal = getApplyStatusTxtBjte(value);//购买状态bjte
		        			if("getPayStatusTxt"==dataFormat)txtVal = getPayStatusTxt(value);//支付状态
		        			if("getDealStatusTxtBjte"==dataFormat)txtVal = getDealStatusTxtBjte(value);//订单状态
		        			if("getBillStatusTxt"==dataFormat)txtVal = getBillStatusTxt(value);//结算状态
		        			if("getSessionStatus"==dataFormat)txtVal = getSessionStatus(value);//
		        			
		        		}catch(e){console.log(e);}
	        		}
	        		//2.显示最大值，超出部分以...
	        		var dataMax = thisObj.attr("data-max");
	        		if(undefined!=dataMax && txtVal){
	        			if(txtVal.length>dataMax*1){
	        				txtVal = subStr(value,dataMax);
	        				thisObj.attr("title",value);
	        			}
	        		}
	        		
	        		//根据标签不同转换不同的。
        			var tagName = thisObj[0].tagName;
	        		if('IMG'==tagName && value){
	        			thisObj.attr("src",value);
	        		}else if('A'==tagName && value){
	        			if(value.indexOf("http")>-1){
	        				thisObj.attr("href",value);
	        			}
	        		}else if('INPUT'==tagName && value){
	        			
	        			//判断input是否是单选框，如果是将预置值与数据值相同的按钮选中
	        			if($(this).attr('type')=="radio") {
	        				if($(this).val()==value) {
	        					$(this).attr("checked","checked");
	        				}
	        			}else{
	        			//if($(this).attr('type')=="text") {
	        				//thisObj.val(txtVal);
		        			//update 20160804 xhe 页面文本框/隐藏文本框若为空则赋值，否则不赋值；
		        			thisObj.val(strUtil.doNull(thisObj.val(),txtVal));
	        			}
	        		}else{
		        		thisObj.text(txtVal);
	        		}
	        	}
	        });;
	        
	        //$("#"+formName).find("#"+key).val(value);
	        /**
	        $("#"+formName).find("[name='"+key+"'],[name='"+key+"[]']").each(function(){
	            tagName = $(this)[0].tagName;
	            type = $(this).attr('type');
	            if(tagName=='INPUT'){
	                if(type=='radio'){
	                    $(this).attr('checked',$(this).val()==value);
	                }else if(type=='checkbox'){
	                    arr = value.split(',');
	                    for(var i =0;i<arr.length;i++){
	                        if($(this).val()==arr[i]){
	                            $(this).attr('checked',true);
	                            break;
	                        }
	                    }
	                }else{
	                    $(this).val(value);
	                }
	            }else if(tagName=='SELECT' || tagName=='TEXTAREA'){
	                $(this).val(value);
	            }
	             
	        });
	        
	        **/
	    }	
	}
}


var AjaxUtil = {
	/**
	 * AJAX的POST请求方法
	 * @param params
	 */
	requestPost:function(params){
		var options = $.extend({
			async:true, //默认值，表示是否执行时与JS代码同步还是异步，如果true，为异步
			cache:false,
			type:'POST',
			dataType:'json',
			data:{}
		},params);
		$.ajax(options);
	},

	requestGet:function(params){
		var options = $.extend({
			async:true, //默认值，表示是否执行时与JS代码同步还是异步，如果true，为异步
			cache:false,
			type:'GET',
			dataType:'json',
			data:{}
		},params);
		$.ajax(options);
	}
}


var TreeUtil = {
	/**
	 * @param rows 获取非标准tree格式数据
	 * @param id   转换为标准id的字段值
	 * @param parentId  父节点字段值
	 * @param text  	tree文本显示字段
	 * @param title		当数据不符合父子关系时，需要传入title{id:id,text:text}
	 * 					为当前根节点，负责生成的数据只有子节点，不美观
	 * @returns {Array}  
	 */
	convert:function convert(rows,id,parentId,text,title){  
	    function exists(rows, fatherId){  
	        for(var i=0; i<rows.length; i++){  
	            if (rows[i][id] == fatherId) return true;  
	        }  
	        return false;  
	    }  
	    var nodes = [];
	    
	    //当parentId为空，说明数据不是父子关系，都title的为子节点
	    if(parentId == null) {
	    	if(rows == null || rows.length ==0) {
	    		return nodes;
	    	}
	    	var childs = [];
	    	for(var i=0; i<rows.length; i++){
	    		var row = rows[i];  
	    		var child = {id:row[id],text:row[text]};
	    		childs.push(child); 
	        }
	    	nodes.push({  
	            id:"0",
	            text:title,
	            //state:'closed',
	            children:childs
	        });
	    	return nodes;
	    }
	    
	    // 得到顶层节点
	    for(var i=0; i<rows.length; i++){
	        var row = rows[i];
	        if (!exists(rows, row[parentId])){ 
	            nodes.push({
	                id:row[id],  
	                text:row[text],
	                state:'open'
	            });  
	        }
	    }  
	    var toDo = [];  
	    for(var i=0; i<nodes.length; i++){  
	        toDo.push(nodes[i]);  
	    } 
	    while(toDo.length){  
	        var node = toDo.shift();    // 父节点 
	        // 得到子节点 
	        for(var i=0; i<rows.length; i++){  
	            var row = rows[i];
	            if (row[parentId] == node.id){
	                var child = {id:row[id],text:row[text]};  
	                if (node.children){  
	                    node.children.push(child); 
	                } else { 
	                    node.children = [child];  
	                }  
	                toDo.push(child);  
	            }
	        }
	    } 
	    return nodes;  
	}	
}


//数据字典工具
var DictUtil = {
	getDictName:function(cateEname,fatherValue,key){
		var resdata = "";
		$.ajax({
			url:ctx+'/dictSelect.action?cateEname='+cateEname+'&fatherValue='+fatherValue,
	        async:false,
	        type: "POST",
	        dataType: "JSON",
	        error:function(){
	        	return "";
	        },
	        success:function(data){
	    		for(var k in data){
					if(key==data[k].id){
						resdata = data[k].text;
						return resdata;
					}
				}
	        	
	        }
	    });
		return resdata;
	},
	getDictNameByFile:function(cateEname,fatherValue,key){
		var resdata = "";
		$.ajax({
			url:"/js/dictData/dict-data-"+cateEname+".js",
			//url:ctx+'/dictSelect.action?cateEname='+cateEname+'&fatherValue='+fatherValue,
	        async:false,
	        type: "POST",
	        dataType: "JSON",
	        error:function(){
	        	return "";
	        },
	        success:function(data){
	    		for(var k in data){
					if(key==data[k].id){
						resdata = data[k].text;
						return resdata;
					}
				}
	        	
	        }
	    });
		return resdata;
	},
	getDictList:function(id,url,DictType) {
		$.ajax({
			async:false,
	        url: url,  
	        type: "get",
	        data:{
				operate:'dict',
				dict_type:DictType
			},
	        dataType: "html",
	        error: function(){  
	           alert('异常错误');  
	        },  
	        success: function(data){//如果调用php成功   
	        	$(id).empty().prepend(data);
	        }
	    });
	},
	getRadioList:function(id,name,url,data) {
		$.ajax({
	        url: url, 
	        async:false,
	        type: "get",
	        data:data,
	        dataType: "json",
	        //dataType: "jsonp",
		    //jsonp:'callback',
	        error: function(){  
	           alert('异常错误');  
	        },  
	        success: function(data){
	        	var obj = data;
	        	//var obj = $.parseJSON(data);
	        	//console.log(obj);
				for(var i = 0; i < obj.length; i++){
					if(i==0){
						$(id).append("<input type='radio' value='"+obj[i].itemValue+"' name='"+name+"'/>"+obj[i].itemText);
						$("input[name='"+name+"'][value='"+obj[i].itemValue+"']").prop("checked", true);  
					}else{
						$(id).append("<input type='radio' value='"+obj[i].itemValue+"' name='"+name+"'/>"+obj[i].itemText);
					}
				}
	        }
	    });
	},
	getDictExtList:function(id,url,data) {
		$.ajax({
	        url: url, 
	        type: "get",
	        data:data,
	        dataType: "json",
	        async:false,
	        //dataType: "jsonp",
		    //jsonp:'callback',
	        error: function(){  
	           alert('异常错误');  
	        },  
	        success: function(data){
	        	//var obj = data.rows;
	        	var obj = data;
				for(var i = 0; i < obj.length; i++){
					$(id).append("<option value='"+obj[i].itemValue+"'>"+obj[i].itemText+"</option>");
				}
	        }
	    });
	},
	getCheckboxList:function(id,name,url,data) {
		$.ajax({
	        url: url, 
	        async:false,
	        type: "get",
	        data:data,
	        dataType: "json",
	        //dataType: "jsonp",
		    //jsonp:'callback',
	        error: function(){  
	           alert('异常错误');  
	        },  
	        success: function(data){
	        	var obj = data;
	        	//var obj = $.parseJSON(data);
				for(var i = 0; i < obj.length; i++){
					$(id).append("<input type='checkbox' value='"+obj[i].itemValue+"' name='"+name+"'/>"+obj[i].itemText);
				}
	        }
	    });
	},
	checkSelectDict:function(id,value) {
		$(id).val(value);
	},
	checkRadioDict:function(name,value) {
		$("input[type='radio'][name='"+name+"'][value='"+value+"']").prop('checked',true);
	},
	//value必须是数组类型，否则无法处理
	checkCheckboxDict:function(name,args) {
		if(args!=null){
			for(var i=0;i<args.length;i++) {
				$("input[type='checkbox'][name='"+name+"'][value='"+args[i]+"']").prop('checked',true);
			}
		}
	
	},
	selectProvince:function(provinceId,url,data,provinceCode) {
		$.ajax({
	        url: url, 
	        async:false,
	        type: "POST",
	        data:data,
	        dataType: "text",
	        error: function(){  
	           alert('异常错误');  
	        },  
	        success: function(data){
	        	var obj = $.parseJSON(data);
				for(var i = 0; i < obj.length; i++){
					if(obj[i].id == provinceCode ){
						$(provinceId).text(obj[i].text);
					}
				}
	        }
	    });
	},
	selectCity:function(cityId,url,data,cityCode) {
		$.ajax({
	        url: url, 
	        async:false,
	        type: "POST",
	        data:data,
	        dataType: "text",
	        error: function(){  
	           alert('异常错误');  
	        },  
	        success: function(data){
	        	var obj = $.parseJSON(data);
				for(var i = 0; i < obj.length; i++){
					if(obj[i].id == cityCode){
						$(cityId).text(obj[i].text);
					}
				}
	        }
	    });
	},
	/**
	 * 
	 * @param objId
	 * @param url
	 * @param data
	 * @param code
	 * @param tag如果原有值不为空，是否保留原有值,true:保留
	 */
	selectItemName:function(objId,url,data,code,tag) {
		$.ajax({
	        url: url, 
	        async:false,
	        type: "POST",
	        data:data,
	        dataType: "text",
	        error: function(){  
	           alert('异常错误');  
	        },  
	        success: function(data){
	        	var obj = $.parseJSON(data);
				for(var i = 0; i < obj.length; i++){
					if(obj[i].id == code){
						if(tag==true){
							$(objId).append(obj[i].text);
						}else{
							$(objId).text(obj[i].text);
						}
						
					}
				}
	        }
	    });
	},
	/**
	 * 把对应数据库表值按照，指定字段拼接成select所需要的元素
	 * @param id
	 * @param datas 定义ajax请求参数数据
	 * @param param 定义需要自动填充的属性
	 */
	getDataToSelect:function(id,datas,param){
		var value = param.value;
		var text = param.text;
		var otherStr = param.other;
		var otherMap = {};
		if(otherStr){
			var oars = otherStr.split(",");
			for(var a = 0;a<oars.length;a++){
				otherMap[oars[a]]=oars[a];
			}
		}
		$(id).html("");
		$(id).append("<option value=''>--请选择--</option>");
		$.ajax({
		    type:'get',
		   	url:common_list_url+"?doCode=dymicSql",
		    data:datas,
		    async:false,
		    dataType:'json',
		    success: function(myData){
		    	//console.log(myData);
		    	if(myData && myData.total>0){
		    		for (var i=0;i<myData.total;i++){
		    			var obj = myData.rows[i];
		    			var optionst = "<option ";
		    			//拼接值和指定的属性
		    			for(key in obj){
		    				if(value == key) optionst += " value='"+obj[key]+"' ";
		    				if(otherMap[key]==key) optionst += key.replace(/([A-Z])/g,"-$1").toLowerCase()+"='"+obj[key]+"'";
		    			}
		    			//拼接text文本
		    			for(key2 in obj){
		    				if(text== key2) optionst += ">"+obj[key2]+"</option>";
		    				continue;
		    			}
		    			
			    		$(id).append(optionst);
		    		}
		    	}
		  	}
		});	
	}
}
/**  
 * 将数值四舍五入(保留2位小数)后格式化成金额形式  
 * @param num 数值(Number或者String)  
 * @return 金额格式的字符串,如'1,234,567.45'  
 * @type String  
 */    
function fmoney(num) {    
	if(strUtil.isNull(num)){
		num = "0";
	}else{
		num = num.toString().replace(/\$|\,/g,'');  
	}
    if(isNaN(num))    
    num = "0";    
    sign = (num == (num = Math.abs(num)));    
    num = Math.floor(num*100+0.50000000001);    
    cents = num%100;    
    num = Math.floor(num/100).toString();    
    if(cents<10)    
    cents = "0" + cents;    
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)    
    num = num.substring(0,num.length-(4*i+3))+','+    
    num.substring(num.length-(4*i+3));    
    return (((sign)?'':'-') + num + '.' + cents);    
}
function moneyZhuan(v,f){
	if(isNaN(v)){  
        return v;  
    }
    var yi = Math.pow(10,8);
    var wan = Math.pow(10,4);
    if( v>yi || v==yi ){
    	return parseFloat(v/yi).toFixed(2)+"亿元";
    }else if( v>wan || v==wan ){
 	   return parseFloat(v/wan).toFixed(2)+"万元";
    }else if(v*1>0){
    	return v+"元";
    }else{
    	return f;  
    }
}
function subStr(str,len){
	if(strUtil.isNull(str)){
		return "";
	}
	if(str.length>len){
		return str.substring(0,len)+"...";
	}else{
		return str;
	}
}

/**
 * 英文首字母大写
 * @param str
 * @returns
 */
function replaceStr(str){ // 正则法
	 str = str.toLowerCase();
	 var reg = /\b(\w)|\s(\w)/g; //  \b判断边界\s判断空格
	 return str.replace(reg,function(m){ 
	  return m.toUpperCase()
	 });
	}

